Go 语言学习-实现抽象类
在 Java 这种面向对象的语言中,抽象类是我们经常会运用到的对抽象概念进行定义的机制。
public abstract class Game {
public void play() {
System.out.println(this.name() + " is awesome!");
}
public abstract String name();
}
public class Dota extends Game {
public String name() {
return "Dota";
}
}
public class LOL extends Game {
public String name() {
return "LOL";
}
}
golang 中实现抽象类的方式
1、将抽象方法定义在 interface 中。
type IGame interface {
Name() string
}
2、定义”父类”
type Game struct {}
func (g *Game) play(game IGame) {
fmt.Printf(fmt.Sprintf("%s is awesome!", game.Name()))
}
这里是重点,我们将 game IGame 传了进来。这样我们便可以调用 “子类” 的方法来获取名字。从而间接地实现了在公共方法中调用不同 “子类” 的实现的抽象方法。
3、定义 “子类” 接着,我们再定义 Dota 和 LOL 这 2 个 struct 即可。
type Dota struct {
Game
}
func (d *Dota) Name() string {
return "Dota"
}
type LOL struct {
Game
}
func (l *LOL) Name() string {
return "LOL"
}
现在,在初始化 Dota 和 LOL 结构体后,便可以调用 func (g *Game) play(game IGame)
方法了。
dota := &Dota{}
dota.play(dota)
lol := &LOL{}
lol.play(lol)
// 输出:
//Dota is awesome!
//LOL is awesome!